package com.zcq.dm.utils;

import org.apache.commons.lang3.StringUtils;

/**
 * 脱敏工具类
 */
public class DataMaskingUtil {

    /**
     * 脱敏处理
     * @param source 原字符串
     * @param start  脱敏保留前位数
     * @param end    脱敏保留后位数
     * @return
     */
    public static String desensitization(String source, int start, int end) {
        return source.replaceAll(String.format("(?<=.{%d}).(?=.{%d})", start, end), "*");
    }

    /**
     * 号码脱码
     */
    public static String phoneFilter(String content) {
        if(StringUtils.isBlank(content)){
            return content;
        }
        //脱敏 前3后4
        return desensitization(content, 3, 4);
    }

    /**
     * 身份证号脱敏
     */
    public static String idNoFilter(String content) {
        if(StringUtils.isBlank(content)){
            return content;
        }
        //脱敏 前2后4
        return desensitization(content, 2, 4);
    }

    /**
     * 银行卡号脱敏
     */
    public static String bankNoFilter(String content) {
        if(StringUtils.isBlank(content)){
            return content;
        }
        //脱敏 前0后4
        return desensitization(content, 0, 4);
    }

    /**
     * 地址脱敏
     */
    public static String addressFilter(String content) {
        if(StringUtils.isBlank(content)){
            return content;
        }
        //展示前30% 四舍五入
        int n = Math.round(content.length() * 0.3f);
        return desensitization(content, n, 0);
    }

    /**
     * 催记内容脱敏
     */
    public static String bodyFilter(String content) {
        String replaceContent = "*";
        if (StringUtils.isNotEmpty(content)) {
            String fixedPhoneRegex = "(0[0-9]{2,3}\\-?)?(\\d{2})\\d{3,4}(\\d{2})";

            return content.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1" + replaceContent + "$2")
                    .replaceAll(fixedPhoneRegex, "$1$2" + replaceContent + "$3");
        }
        return "";
    }

}
